# -*- coding: utf-8 -*-

# @Time : 2020/3/6 8:45
# @Author : WYT
# @Site :
# @File : SingleMeta.py
# @Software: PyCharm


class SingleMeta(type):
    __instance = None
    def __call__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = super.__call__(SingleMeta, cls).__call__(*args, **kwargs)
        return cls.__instance

# class type(object):
#     type(object_or_name, bases, dict)
#     type(object) -> the object's type
#     type(name, bases, dict) -> a new type
#
#     # Methods defined here:
#
#     def __call__(self, /, *args, **kwargs)
#         Call self as a function.
#
#     __delattr__(self, name, /)
#         Implement delattr(self, name).
#
#     __dir__(...)
#         __dir__() -> list
#         specialized __dir__ implementation for types
#
#     __getattribute__(self, name, /)
#         Return getattr(self, name).
#
#     __init__(self, /, *args, **kwargs)
#         Initialize self.  See help(type(self)) for accurate signature.
#
#     __instancecheck__(...)
#         __instancecheck__() -> bool
#         check if an object is an instance
#
#     __new__(*args, **kwargs)
#         Create and return a new object.  See help(type) for accurate signature.
#
#     __prepare__(...)
#         __prepare__() -> dict
#         used to create the namespace for the class statement
#
#     __repr__(self, /)
#         Return repr(self).
#
#     __setattr__(self, name, value, /)
#         Implement setattr(self, name, value).
#
#     __sizeof__(...)
#         __sizeof__() -> int
#         return memory consumption of the type object
#
#     __subclasscheck__(...)
#         __subclasscheck__() -> bool
#         check if a class is a subclass
#
#     __subclasses__(...)
#         __subclasses__() -> list of immediate subclasses
#
#     mro(...)
#         mro() -> list
#         return a type's method resolution order
#
#     ----------------------------------------------------------------------
#     Data descriptors defined here:
#
#     __abstractmethods__
#
#     __dict__
#
#     __text_signature__
#
#     ----------------------------------------------------------------------
#     Data and other attributes defined here:
#
#     __base__ = <class 'object'>
#         The most base type
#
#     __bases__ = (<class 'object'>,)
#
#     __basicsize__ = 432
#
#     __dictoffset__ = 132
#
#     __flags__ = -2146675712
#
#     __itemsize__ = 20
#
#     __mro__ = (<class 'type'>, <class 'object'>)
#
#     __weakrefoffset__ = 184

if __name__ == '__main__':

    a = SingleMeta()
    print(a)